<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //需求:写一个方法,实现把list列表数据变成tree树状数据
        var data = [

            { name: '根目录1', id: 1, parentId: 0 },

            { name: '根目录2', id: 2, parentId: 0 },

            { name: '目录1-1', id: 3, parentId: 1 },

            { name: '目录1-2', id: 4, parentId: 1 },

            { name: '目录2-1', id: 5, parentId: 2 },

            { name: '目录1-2-1', id: 6, parentId: 4 }

        ];
        //    console.log(data.slice(-3));
        // 输出结构：
        // [
        //     {name: "根目录1", id: 1, parentId: 0, 
        //         children: [
        //             {name: "目录1-1", id: 3, parentId: 1},
        //             {name: "目录1-2", id: 4, parentId: 1,
        //              children: [
        //                     {name: "目录1-2-1", id: 6, parentId: 4}
        //              ]
        //             }
        //         ]
        //     },
        //     {name: "根目录2", id: 2, parentId: 0, 
        //         children:[ 
        //             {name: "目录2-1", id: 5, parentId: 2}
        //         ]
        //     }
        // ] 

        //思路：1.先判断第1层data[i].parentId==传入的id 推入数组 2.在判断找到的儿子id==孙子的parentId，如果有给当前对象增加属性childred，存储找到的孙子对象
        function withData(data, parentId) {

            let arr = []

            data.forEach(item => {
                if (item.parentId == parentId) {
                    arr.push(item)
                    data.map(el => {
                        if (el.parentId == item.id) {
                            item.children = withData(data, item.id)
                            return
                        }
                    })
                }
            })
            return arr
        }

        console.log(withData(data, 0));

        // function withData(data, parentId) {
        //     let arr = []
        //     data.forEach(item => {
        //         if (item.parentId == parentId) {
        //             arr.push(item)
        //             data.map(el => {
        //                 if (el.parentId = item.id) {
        //                     item.children = withData(data, item.id)
        //                     return
        //                 }
        //             })
        //         }
        //     })
        //     return arr
        // }

        // console.log(withData(data, 0))

            // function arrayToTree(data, parent) {

            // }

            // console.log( arrayToTree(data,0)) 
        /* 数组方法:
        some() 方法用于检测数组中的元素是否满足指定条件（函数提供）。
        some() 方法会依次执行数组的每个元素：
        如果有一个元素满足条件，则表达式返回true , 剩余的元素不会再执行检测。
        如果没有满足条件的元素，则返回false */

    </script>
</body>

</html>